import Redis from 'ioredis';

// Redis配置
const redisConfig = {
    host: 'localhost',
    port: 6379,
    password: '', // 如果有密码
    db: 0,
    retryDelayOnFailover: 100,
    maxRetriesPerRequest: 3,
};

// 创建Redis实例
export const redisClient = new Redis(redisConfig);

// Token相关的Redis key前缀
export const TOKEN_PREFIX = 'user_token:';
export const TOKEN_EXPIRE_TIME = 24 * 60 * 60; // 24小时，单位：秒

// Redis连接事件监听
redisClient.on('connect', () => {
    console.log('Redis连接成功');
});

redisClient.on('error', (err) => {
    console.error('Redis连接错误:', err);
});

// Token管理工具函数
export const TokenManager = {
    /**
     * 设置用户token
     * @param userId 用户ID
     * @param token token值
     */
    async setUserToken(userId: string, token: string): Promise<void> {
        const key = `${TOKEN_PREFIX}${userId}`;
        await redisClient.setex(key, TOKEN_EXPIRE_TIME, token);
    },

    /**
     * 获取用户当前有效token
     * @param userId 用户ID
     * @returns token或null
     */
    async getUserToken(userId: string): Promise<string | null> {
        const key = `${TOKEN_PREFIX}${userId}`;
        return await redisClient.get(key);
    },

    /**
     * 删除用户token（退出登录）
     * @param userId 用户ID
     */
    async deleteUserToken(userId: string): Promise<void> {
        const key = `${TOKEN_PREFIX}${userId}`;
        await redisClient.del(key);
    },

    /**
     * 验证token是否为用户当前有效token
     * @param userId 用户ID
     * @param token 待验证的token
     * @returns 是否有效
     */
    async validateUserToken(userId: string, token: string): Promise<boolean> {
        const currentToken = await this.getUserToken(userId);
        return currentToken === token;
    }
};
